package com.kwan.xframe.mvvm.data.source.http;


import java.util.HashMap;

import io.reactivex.rxjava3.subscribers.DisposableSubscriber;
import timber.log.Timber;


/**
 * @param <T> 接收的数据类型
 */
public abstract class HttpDataSubscriber<T> extends DisposableSubscriber<T> {

	public Object vocational_id;
	public HashMap<String, Object> mExData;

	public HttpDataSubscriber() {

	}


	@Override
	protected void onStart() {
		super.onStart();
		Timber.e("onStart.....");
	}

	/**
	 * 事件队列完结
	 * <br>
	 * 在一个正确运行的事件序列中, onCompleted() 和 onError() 有且只有一个，
	 * 并且是事件序列中的最后一个。
	 * 需要注意的是，onCompleted() 和 onError() 二者也是互斥的，
	 * 即在队列中调用了其中一个，就不应该再调用另一个。
	 */

	@Override
	public void onComplete() {
		Timber.e("对Complete事件作出响应");
		onDataCompleted(vocational_id, mExData);
	}

	protected abstract void onDataCompleted(Object vocational_id, HashMap<String, Object> mExData);

	@Override
	public void onError(Throwable e) {
		Timber.e(e, "对Error事件作出响应");
		onDataError(vocational_id, mExData, e);
		e.printStackTrace();
	}

	protected abstract void onDataError(Object vocational_id, HashMap<String, Object> mExData, Throwable e);

	@Override
	public void onNext(T msg) {
		Timber.e("接收到了事件%s", msg);
		onDataNext(vocational_id, mExData, msg);
	}

	protected abstract void onDataNext(Object vocational_id, HashMap<String, Object> mExData, T msg);


}
